.. talimat documentation master file, created by
   sphinx-quickstart on Mon Jun 24 14:53:40 2019.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Talimat Sistemi
===================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

talimat dosyaları mps'in paketleri kurması için gerekli bilgileri içeren bir .ini dosyasıdır.


Talimat dizini
-----------------
Talimat dizinleri paket ile ilişkili talimat dosyasını ve kurulum aşamasında gerekebilecek
bir çok ayrı dosyayı barındırır.

::

    gcc#9.1.0-1/
    ├── derle.sh
    ├── kurkos.sh
    ├── pakur.sh
    └── talimat


\*.sh dosyaları
~~~~~~~~~~~~~~~~~~~~~
Talimat işlemleri için ayrı script dosyları hazırlanıp bunlar talimat dosyası içinden
'dosya' anahtar kelimesi ile çağırılabilir. 

::

    [derle]
    dosya = derle.sh
    
    [pakur]
    dosya = pakur.sh

Bu dosyların 'derle' ve 'pakur' altında kullanılması halinde önerilen isimlendirme 'derle' için
'derle.sh', 'pakur' için ise 'pakur.sh' şeklindedir.

Koşuk betikleri
~~~~~~~~~~~~~~~~~~~~~
Koşuk betikleri talimat dizininde saklanabilir. Bunlar mps tarafından otomatik olarak algılanır ve
kullanılır.

| **kurkos.sh**
|   Paket kurulduktan sonra çalışacak betik.
| **koskur.sh**
|   Paket kurulmadan önce çalışacak betik.
| **silkos.sh**
|   Paket silindikten sonra çalışacak betik.
| **kossil.sh**
|   Paket silinmeden önce çalışacak betik.


Yama dosyaları
~~~~~~~~~~~~~~~~~~~~~
Yama dosyaları talimat dizininde saklanabilir. Bu durumda yapılması gereken 'dosya' anahtarı ile
dosyayı talimat'taki kaynak bölümüne eklemek ve 'yama' anahtarı ile ilişkili yamayı belirtmektir.
Daha fazla bilgi için dosya formatını inceleyin.

::

    lua#5.3.5-1/
    ├── derle.sh
    ├── liblua.so.patch
    ├── lua.pc
    ├── pakur.sh
    └── talimat

::

    [kaynak]
    gz      = https://www.lua.org/ftp
    dosya   = liblua.so.patch
    dosya   = lua.pc
    
    [derle]
    yama    = 2
    ...

Eklenen dosya için aşağıdaki komut çalıştırılıcaktır:

.. code:: bash

    patch -Np1 -i $SRC/dosya_ismi


libgerekler ve pktlibler
~~~~~~~~~~~~~~~~~~~~~~~~~~
libgerekler dosyası, paketin hangi kütüphanelere ihtiyacı olduğunu belirtir.

Örneğin aşağıda python paketinin 3.7.3'üncü sürümü için gereken kütüphaneler listelenmiştir.
Bunlar libgerekler dosyasında saklanır.

::

    libdl.so.2
    libpython3.7m.so.1.0
    libpthread.so.0
    libc.so.6
    libuuid.so.1
    libm.so.6
    libexpat.so.1
    liblzma.so.5
    libbz2.so.1.0
    libz.so.1
    libpanelw.so.6
    libncursesw.so.6
    libgdbm.so.6
    libgdbm_compat.so.4
    libsqlite3.so.0
    libssl.so.1.1
    libcrypto.so.1.1
    libcrypt.so.1
    libreadline.so.8
    libutil.so.1


pktlibler ise paketin sisteme sunduguğu kütüphaneleri belirtir.

Aşağıda ise aynı paketinin sisteme sunduğu kütüphanler listelenmiştir.
Bunlar da pktlibler dosyasında saklanır.

::

    libpython3.so 
    libpython3.7m.so.1.0
    libpython3.7m.so





Dosya formatı
-----------------

[paket]
~~~~~~~~~~~~~~~~~
| **tanim**
|   Paketin açıklaması.
| **paketci**
|   Paketçilerin isimleri.
| **grup**
|   Paketin grubu. 
|   Gruplarlar belirlenirken sistemde önceden tanımlanan gruplar 
    kullanılmalıdır, bunlar 'mps gruplar' komutu ile öğrenilebilir.
| **url**
|   Paketin web sayfası

[gerek]
~~~~~~~~~~~~~~~~~
| **derleme**
|   Paketin derlenmesi için gerekenler
| **calisma**
|   Paketin çalışması için gerekenler

[kaynak]
~~~~~~~~~~~~~~~~~
| **github**
|   Verilen kaynak GitHub için 'kullanıcıadı/repoismi' olmalıdır.
    Bu durumda mps'nin kullandığı tam url ise 'github.com/kullanıcıadı/repoismi' olacaktır.
| **gz,xz,bz2**
|   Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
|   Kullanılan tam format, girdi 'url' ise 'url/$isim-surum.tar.[gz|xz|bz2]' olacaktır.
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.

| Bunların dışında herhangi bir alfanumerik kelime kullanılabilir. Ancak önerilen kullanım 
    herhangi bir pozitif sayı veya 'url' anahtar kelimesidir.

Dosya isimlendirme
^^^^^^^^^^^^^^^^^^^
İndirilen dosya için kaynak belirtirken '::' postfixi ile yeni bir isim belirtilebilir. Yeni
isimde değişkenler de kullanılabilir.

::
    
    1       = https://github.com/pallets/markupsafe/archive/$surum.tar.gz::$isim-$surum.tar.gz


[sha256] ve [sha512]
~~~~~~~~~~~~~~~~~~~~~~
| **1,2,3,4...**
|   Kaynak dosyaları için sha anahtarlarını belirtir.
|   Numara, kaynağın [kaynak] altındaki sırasını belirtir.


[derle]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin derlenme tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası veya ismi.


[pakur]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin kurulma tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası veya ismi.
| **servis**
|   Paketin içine kurulacak servis.
|   Bu dosya /usr/milis/ayarlar altında bulunmak zorundadır.



Değişkenler
-----------------
| Talimat dizininde paketler belirli bir formata göre isimlendirilir, bu format
| 'isim#sürüm-devir'
| şeklindedir ve buradaki değerler değişkenler olarak kullanılabilir.

| **$isim**
|   Paketin ismi.
| **$surum**
|   Paketin sürümü.
| **$devir**
|   Paketin devri.

[paket] bloğunun altındaki her anahtar değişken olarak kullanılabilir.

Tipler
-----------------
Tipler, betik yazmak yerine daha sade bir talimat için kullanılabilir.

Derleme tipleri
~~~~~~~~~~~~~~~~~
Derleme tipleri, derleme anında çalıstırılacak hazır komutlar içerir.

gnu
^^^^^^^^^^^^^^^^

.. code::  bash
    
    ./configure $confopt && make

Ek konfigürasyon yapmak için 'tip' anahtarından önce 'ekconf' anahtarı kullanılabilir.
Anahtarın değeri gerekli komutlar çağrılımadan önce $confopt değerine atanacaktır.

cmake
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cmake ./ && make


py3 ve py2
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    python3 setup.py build

.. code:: bash

    python2 setup.py build

meson
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cd $SRC && milis-meson $isim-$surum build $extopt

ninja
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    mkdir -p build && ninja -C build


Paket kurma tipleri
~~~~~~~~~~~~~~~~~~~~
Paket kurma tipleri, kurulum sırasında çalıstırılacak hazır komutlar içerir.

gnu
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    make DESTDIR=$PKG install

py3 ve py2
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    python3 setup.py install --root=${PKG} --optimize=1 --skip-build

.. code:: bash 
    
    python2 setup.py install --root=${PKG} --optimize=1 --skip-build


ninja
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    DESTDIR=$PKG ninja -C build install

meson
^^^^^^^^^^^^^^^^

.. code:: bash 
    
    cd $SRC && DESTDIR=$PKG ninja -C build install

